/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Estructuras;

import java.util.Observable;
import java.util.Observer;

/**
 *
 * @author necross
 */
public class SO implements Observer, Runnable {
  //Lista de task struct
  private task_list tl;
  
  //Scheduler de procesos
  private Scheduler sche;


  /**
   * Constructor que recibe el Sche
   */
  public SO(Scheduler sche){
     this.tl =  new task_list() ;
     this.sche = sche;
  }

  public task_list getTaskList(){
      return this.tl;
  }

  /**
   * Agrega un nuevo proceso al task_list y al scheduller
   */
  public void crearProceso(Task_struct ts){
    //Lo agrega a la task_list
    this.tl.Insert(ts);
    //Lo agrega al Scheduler
    sche.enqueue_task(ts);
    
  }

  
  public void update(Observable o, Object o1) {
    //Proceso que se ejecuta al momento de que cambie el objeto observado
    //Revisa si hay un proceso en el Task_List que no haya sido eliminado
    //Inicia el Hilo que verifica si hay procesos por eliminar
    Thread th = new Thread(this);
    th.start();
  }

  public void run() {
    this.recorrerTaskList();
  }


  //Revisa la lista en busqueda de un proceso que este marcado
  //para ser eliminado
   public void recorrerTaskList(){
            tl.recorrerTaskList(sche);
         }
}
